2020-2021 Sunseeker Telemetry and Lighting System
flashctl_ex1_infoSegmentWrite.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 /*******************************************************************************
33  * MSP430i20xx Flash - Flash In-System Programming, Information Segment
34  *
35  * Description: Unlock the Information Segment, overwrite a number of values
36  * within it, then re-lock the Information Segment when writes are complete.
37  * Set breakpoint on NOP in main loop to avoid stressing flash. DO NOT ERASE
38  * ENTIRE INFORMATION SEGMENT, important values (TLV, etc) are contained
39  * within this segment.
40  *
41  * MSP430i20xx
42  * -----------------
43  * /|\| |
44  * | | |
45  * --|RST |
46  * | |
47  * | |
48  * | |
49  *
50  * Author: Yang Lu
51  ******************************************************************************/
52 #include "driverlib.h"
53 
54 // Address of the beginning of the Flash Information Segment
55 #define SEGSTART 0x1060
56 // Number of bytes within segment to write
57 #define SEG_LEN 16
58 
59 // Value to write to segment
60 const uint32_t Value = 0xBEEFDEAD;
61 
62 void write_InfoSeg(uint32_t value);
63 
64 void main(void) {
65 
66  // Pointer to beginning of Flash segment
67  uint32_t *flashPtr = (uint32_t *)SEGSTART;
68 
69  // Stop WDT
70  WDT_hold(WDT_BASE);
71 
72  // Setting the DCO to use the internal resistor. DCO will be at 16.384MHz
73  CS_setupDCO(CS_INTERNAL_RESISTOR);
74 
75  // Setting MCLK to DCO / 1. MCLK = 16.384MHz.
76  CS_initClockSignal(CS_MCLK, CS_CLOCK_DIVIDER_1);
77 
78  // MCLK for Flash Timing Generator
79  // Flash clock will run at ~390kHz. Datasheet recommends 257kHz - 476kHz
80  FlashCtl_setupClock(390095, 16384000, FLASHCTL_MCLK);
81 
82  FlashCtl_unlockInfo();
83  FlashCtl_fillMemory32(Value, flashPtr, SEG_LEN / 4);
84  FlashCtl_lockInfo();
85 
86  while(1) {
87  // Set breakpoint to view memory
89  }
90 }
const uint32_t Value
void write_InfoSeg(uint32_t value)
void main(void)
#define SEGSTART
__no_operation()